<?php

class UsuarioService {

    private $usuarioDAO;

    public function __construct() {
        $this->usuarioDAO = new UsuarioDAO();
    }

    public function salvar($usuario) {
        try {

            $usuario->setSenha(Seguranca::criptografaSenha($usuario->getSenha()));

            if($usuario->getUsuarioID() <= 0){

                if($this->exitePorEmail($usuario->getEmail()))
                        throw new Exception("Erro, ja existe um Usuario com esse Email!!!");
                if($this->exitePorLogin($usuario->getLogin()))
                        throw new Exception("Erro, ja existe um Usuario com esse Login!!!");                   

            }

            $usuario = $this->usuarioDAO->salvar($usuario);

            if(!strpos($usuario->getMedia()->getCaminho(), Constantes::$IMG_ADM_DEFAULT)){
                Util::geraThumb($usuario->getMedia()->getCaminho(), Constantes::$TAM_THUMB_IMG);
            } 

            return $usuario;
            
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function excluir($usuarioID) {

        try {
            if (!isset($usuarioID) || $usuarioID <= 0)
                throw new Exception("Codigo do Usuario Nao Econtrado!!!");

            $this->usuarioDAO->excluir($usuarioID);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function listar($pagina = 0, $email = "", $login = "", $status = -1, $carregarDependencias = false) {
        try {
            return $this->usuarioDAO->listar($pagina, $email, $login, $statusID, $carregarDependencias);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function listarPorOrdem($pagina = 0, $tamanho = 0, $ordem = "usuarioID", $direcao = "DESC", $carregarDependencias = false) {
        try {
            return $this->usuarioDAO->listarPorOrdem($pagina, $tamanho, $ordem, $direcao, $carregarDependencias);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function buscarPorID($usuarioID, $carregarDependencias = false) {
        try {
            if (!isset($usuarioID) || $usuarioID <= 0)
                throw new Exception("Codigo do Usuario Nao Econtrado!!!");
            return $this->usuarioDAO->buscarPorID($usuarioID, $carregarDependencias);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function total($email = "", $login = "", $status = -1) {
        try {
            return $this->usuarioDAO->total($email, $login);
        } catch (Exception $err) {
            throw new Exception($err->getMessage());
        }
    }

    public function exitePorEmail($email){
        if($this->total($email) > 0) return true;
        return false;
    }

    public function exitePorLogin($login){
        if($this->total("",$login) > 0) return true;
        return false;
    }

}
?>